home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / disk / cdrom / MusicBox-2.1os.lha / MusicBox / MusicBoxMisc.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-29  |  12.2 KB  |  514 lines

  1. /*
  2.  ##########################################################################
  3.  ####                                                                  ####
  4.  ####                        The MusicBox Project                      ####
  5.  ####                    ============================                  ####
  6.  ####                                                                  ####
  7.  #### MusicBoxMisc.c                                                   ####
  8.  ####                                                                  ####
  9.  #### Version 2.1os --  September 29, 2000                             ####
  10.  ####                                                                  ####
  11.  #### Copyright (C) 1994  Thomas Dreibholz                             ####
  12.  ####               2000  Molbachweg 7                                 ####
  13.  ####                     51674 Wiehl                                  ####
  14.  ####                     Germany                                      ####
  15.  ####                                                                  ####
  16.  ####                     EMail: Dreibholz@bigfoot.com                 ####
  17.  ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
  18.  ####                                                                  ####
  19.  ##########################################################################
  20. */
  21. /***************************************************************************
  22.  *                                                                         *
  23.  *   This program is free software; you can redistribute it and/or modify  *
  24.  *   it under the terms of the GNU General Public License as published by  *
  25.  *   the Free Software Foundation; either version 2 of the License, or     *
  26.  *   (at your option) any later version.                                   *
  27.  *                                                                         *
  28.  ***************************************************************************/
  29.  
  30. /* MusicBox Prozeduren */
  31.  
  32. #include "MusicBox.h"
  33. #include "MusicBoxLibrary.h"
  34.  
  35. #define xCHECKED (0xffff-CHECKED)
  36.  
  37. extern int rand();
  38.  
  39. extern UWORD  ox,oy;
  40. extern BOOL   IsIconify;
  41. extern BOOL   NoReq;
  42. extern BOOL   LowRes;
  43.  
  44. extern struct Einstellungen  Einstellungen;
  45. extern struct DiskObject     CDMusicBox;
  46. extern struct Window        *CDPlayerWnd;
  47. extern struct Menu          *CDPlayerMenus;
  48. extern struct Gadget        *CDPlayerGadgets[25];
  49. extern struct TextFont      *Font;
  50. extern struct Screen        *Scr;
  51. extern struct ThisCD        *ThisCD;
  52. extern struct Katalog       *Katalog;
  53. extern struct TextAttr       topaz11;
  54. extern struct Screen        *Scr;
  55. extern struct ThisDrive     *ThisDrive;
  56. struct RastPort             *rp;
  57.  
  58.  
  59. struct MenuItem *GetItem(mc,ic,sc)
  60.  UWORD mc,ic,sc;
  61. {
  62.  REGISTER UWORD            i;
  63.  register struct MenuItem *item;
  64.  register struct MenuItem *sub;
  65.  register struct Menu     *menu;
  66.  
  67.  menu=CDPlayerMenus;
  68.  for(i=1;i<mc;i++)
  69.   {
  70.    menu=menu->NextMenu;
  71.    if(menu==NULL) return(0L);
  72.   }
  73.  item=menu->FirstItem;
  74.  for(i=1;i<ic;i++)
  75.   {
  76.    item=item->NextItem;
  77.    if(item==NULL) return(0L);
  78.   }
  79.  if(sc==0) return(item);
  80.  item=item->SubItem;
  81.  for(i=1;i<sc;i++)
  82.   {
  83.    item=item->NextItem;
  84.    if(item==NULL) return(0L);
  85.   }
  86.  return(item);
  87. }
  88.  
  89. LONG MultiRequest(titel,text,gads)
  90.  UBYTE *titel,*text,*gads;
  91. {
  92.  struct EasyStruct easy;
  93.  
  94.  easy.es_StructSize=sizeof(struct EasyStruct);
  95.  easy.es_Flags=0;
  96.  easy.es_Title=titel;
  97.  easy.es_TextFormat=text;
  98.  easy.es_GadgetFormat=gads;
  99.  return(EasyRequestArgs(NULL,&easy,0L,0L));
  100. }
  101.  
  102. void Error(text)
  103.  UBYTE *text;
  104. {
  105.  if(NoReq==FALSE) MultiRequest(GS(15,"Music Box - Error!"),text,GS(16,"Abort"));
  106. }
  107.  
  108. void Information()
  109. {
  110.  UBYTE             tex[12];
  111.  struct InfoStruct info;
  112.  
  113.  sprintf(&tex,"#%08lx",ThisCD->ID);
  114.  info.Title=GS(17,"Music Box - Information");
  115.  info.ProgName=TITEL;
  116.  info.LowRes=LowRes;
  117.  info.Icon=&CDMusicBox;
  118.  info.Text[0].LeftEdge=95;
  119.  info.Text[0].TopEdge=95;
  120.  info.Text[0].Flags=ISTF_LEFT;
  121.  info.Text[0].Text=GS(18,"Current CD:");
  122.  info.Text[1].LeftEdge=95;
  123.  info.Text[1].TopEdge=110;
  124.  info.Text[1].Flags=ISTF_LEFT;
  125.  info.Text[1].Text=GS(19,"ID number:");
  126.  if(Einstellungen.Funktion!=STANDBY)
  127.   {
  128.    info.Text[2].LeftEdge=180;
  129.    info.Text[2].TopEdge=95;
  130.    info.Text[2].Flags=ISTF_LEFT;
  131.    info.Text[2].Text=&Katalog->CDName;
  132.    info.Text[3].LeftEdge=180;
  133.    info.Text[3].TopEdge=110;
  134.    info.Text[3].Flags=ISTF_LEFT;
  135.    info.Text[3].Text=&tex;
  136.    info.Text[4].LeftEdge=0;
  137.   }
  138.  else
  139.    info.Text[2].LeftEdge=0;
  140.  info.RegInfo=NULL;
  141.  SleepPointer(CDPlayerWnd);
  142.  InformationA(&info);
  143.  ClearPointer(CDPlayerWnd);
  144.  TesteLaufwerk();
  145. }
  146.  
  147. struct Prefs
  148. {
  149.  UWORD VolumenL;
  150.  UWORD VolumenR;
  151.  UBYTE AudioL;
  152.  UBYTE AudioR;
  153.  UBYTE Lock;
  154.  UBYTE Kontrolle;
  155.  UBYTE Anzeige;
  156.  UBYTE Format;
  157.  UBYTE AutoRepeat;
  158.  UBYTE AutoStart;
  159.  UBYTE AutoSave;
  160.  UBYTE AutoLoad;
  161.  UBYTE Kopplung;
  162.  UBYTE AutoFlush;
  163.  UBYTE Auswahlmodus;
  164. };
  165.  
  166. struct Prefs Prefs;
  167.  
  168. #define C1(x) Einstellungen.x=Prefs.x
  169. #define C2(x) Prefs.x=Einstellungen.x
  170.  
  171. void PrefsZeigen()
  172. {
  173.  REGISTER BOOL  bool;
  174.  REGISTER UWORD code;
  175.  struct TagItem tag[2];
  176.  
  177.  ClearMenuStrip(CDPlayerWnd);
  178.  ZeigeStatus();
  179.  ZeigeLR();
  180.  ZeigeCDInfo();
  181.  ZeigeVolumen();
  182.  tag[0].ti_Tag=GTSL_Level;
  183.  tag[0].ti_Data=Einstellungen.VolumenR;
  184.  tag[1].ti_Tag=TAG_DONE;
  185.  GTSetGadgetAttrsA(CDPlayerGadgets[25],CDPlayerWnd,NULL,&tag);
  186.  tag[0].ti_Tag=GTSL_Level;
  187.  tag[0].ti_Data=Einstellungen.VolumenL;
  188.  tag[1].ti_Tag=TAG_DONE;
  189.  GTSetGadgetAttrsA(CDPlayerGadgets[23],CDPlayerWnd,NULL,&tag);
  190.  switch(Einstellungen.AudioL)
  191.   {
  192.    case AUDIO_LINKS:
  193.      code=0;
  194.     break;
  195.    case AUDIO_RECHTS:
  196.      code=1;
  197.     break;
  198.    case AUDIO_BEIDE:
  199.      code=2;
  200.     break;
  201.    case AUDIO_AUS:
  202.      code=3;
  203.     break;
  204.   }
  205.  tag[0].ti_Tag=GTCY_Active;
  206.  tag[0].ti_Data=code;
  207.  tag[1].ti_Tag=TAG_DONE;
  208.  GTSetGadgetAttrsA(CDPlayerGadgets[21],CDPlayerWnd,NULL,&tag);
  209.  switch(Einstellungen.AudioR)
  210.   {
  211.    case AUDIO_LINKS:
  212.      code=1;
  213.     break;
  214.    case AUDIO_RECHTS:
  215.      code=0;
  216.     break;
  217.    case AUDIO_BEIDE:
  218.      code=2;
  219.     break;
  220.    case AUDIO_AUS:
  221.      code=3;
  222.     break;
  223.   }
  224.  tag[0].ti_Tag=GTCY_Active;
  225.  tag[0].ti_Data=code;
  226.  tag[1].ti_Tag=TAG_DONE;
  227.  GTSetGadgetAttrsA(CDPlayerGadgets[22],CDPlayerWnd,NULL,&tag);
  228.  tag[0].ti_Tag=GTCY_Active;
  229.  tag[0].ti_Data=Einstellungen.Auswahlmodus;
  230.  tag[1].ti_Tag=TAG_DONE;
  231.  GTSetGadgetAttrsA(CDPlayerGadgets[28],CDPlayerWnd,NULL,&tag);
  232.  if(Einstellungen.Kopplung) bool=TRUE; else bool=FALSE;
  233.  tag[0].ti_Tag=GTCB_Checked;
  234.  tag[0].ti_Data=bool;
  235.  tag[1].ti_Tag=TAG_DONE;
  236.  GTSetGadgetAttrsA(CDPlayerGadgets[26],CDPlayerWnd,NULL,&tag);
  237.  if(Einstellungen.AutoRepeat)
  238.    (GetItem(2,1,1))->Flags |= CHECKED;
  239.  else
  240.    (GetItem(2,1,1))->Flags &= xCHECKED;
  241.  if(Einstellungen.AutoStart)
  242.    (GetItem(2,1,2))->Flags |= CHECKED;
  243.  else
  244.    (GetItem(2,1,2))->Flags &= xCHECKED;
  245.  if(Einstellungen.AutoSave)
  246.    (GetItem(2,1,4))->Flags |= CHECKED;
  247.  else
  248.    (GetItem(2,1,4))->Flags &= xCHECKED;
  249.  if(Einstellungen.AutoLoad)
  250.    (GetItem(2,1,5))->Flags |= CHECKED;
  251.  else
  252.    (GetItem(2,1,5))->Flags &= xCHECKED;
  253.  if(Einstellungen.AutoFlush)
  254.    (GetItem(2,1,6))->Flags |= CHECKED;
  255.  else
  256.    (GetItem(2,1,6))->Flags &= xCHECKED;
  257.  switch(Einstellungen.Kontrolle)
  258.   {
  259.    case AUS:
  260.      (GetItem(2,5,1))->Flags |= CHECKED;
  261.      (GetItem(2,5,2))->Flags &= xCHECKED;
  262.      (GetItem(2,5,3))->Flags &= xCHECKED;
  263.     break;
  264.    case JOYSTICK_I:
  265.      (GetItem(2,5,1))->Flags &= xCHECKED;
  266.      (GetItem(2,5,2))->Flags |= CHECKED;
  267.      (GetItem(2,5,3))->Flags &= xCHECKED;
  268.     break;
  269.    case JOYSTICK_II:
  270.      (GetItem(2,5,1))->Flags &= xCHECKED;
  271.      (GetItem(2,5,2))->Flags &= xCHECKED;
  272.      (GetItem(2,5,3))->Flags |= CHECKED;
  273.     break;
  274.   }
  275.  switch(Einstellungen.Format)
  276.   {
  277.    case ZEIT:
  278.      (GetItem(2,3,1))->Flags |= CHECKED;
  279.      (GetItem(2,3,2))->Flags &= xCHECKED;
  280.      (GetItem(2,3,3))->Flags &= xCHECKED;
  281.      (GetItem(2,3,4))->Flags &= xCHECKED;
  282.     break;
  283.    case ADRESSE:
  284.      (GetItem(2,3,1))->Flags &= xCHECKED;
  285.      (GetItem(2,3,2))->Flags |= CHECKED;
  286.      (GetItem(2,3,3))->Flags &= xCHECKED;
  287.      (GetItem(2,3,4))->Flags &= xCHECKED;
  288.     break;
  289.    case PROZENT:
  290.      (GetItem(2,3,1))->Flags &= xCHECKED;
  291.      (GetItem(2,3,2))->Flags &= xCHECKED;
  292.      (GetItem(2,3,3))->Flags |= CHECKED;
  293.      (GetItem(2,3,4))->Flags &= xCHECKED;
  294.     break;
  295.    case MEGABYTES:
  296.      (GetItem(2,3,1))->Flags &= xCHECKED;
  297.      (GetItem(2,3,2))->Flags &= xCHECKED;
  298.      (GetItem(2,3,3))->Flags &= xCHECKED;
  299.      (GetItem(2,3,4))->Flags |= CHECKED;
  300.     break;
  301.   }
  302.  switch(Einstellungen.Anzeige)
  303.   {
  304.    case TRACK_ANFANG:
  305.      (GetItem(2,2,1))->Flags |= CHECKED;
  306.      (GetItem(2,2,2))->Flags &= xCHECKED;
  307.      (GetItem(2,2,4))->Flags &= xCHECKED;
  308.      (GetItem(2,2,5))->Flags &= xCHECKED;
  309.     break;
  310.    case CD_ANFANG:
  311.      (GetItem(2,2,1))->Flags &= xCHECKED;
  312.      (GetItem(2,2,2))->Flags |= CHECKED;
  313.      (GetItem(2,2,4))->Flags &= xCHECKED;
  314.      (GetItem(2,2,5))->Flags &= xCHECKED;
  315.     break;
  316.    case TRACK_ENDE:
  317.      (GetItem(2,2,1))->Flags &= xCHECKED;
  318.      (GetItem(2,2,2))->Flags &= xCHECKED;
  319.      (GetItem(2,2,4))->Flags |= CHECKED;
  320.      (GetItem(2,2,5))->Flags &= xCHECKED;
  321.     break;
  322.    case CD_ENDE:
  323.      (GetItem(2,2,1))->Flags &= xCHECKED;
  324.      (GetItem(2,2,2))->Flags &= xCHECKED;
  325.      (GetItem(2,2,4))->Flags &= xCHECKED;
  326.      (GetItem(2,2,5))->Flags |= CHECKED;
  327.     break;
  328.   }
  329.  SetMenuStrip(CDPlayerWnd,CDPlayerMenus);
  330. }
  331.  
  332. void KopierePrefs()
  333. {
  334.  C2(VolumenL);
  335.  C2(VolumenR);
  336.  C2(AudioL);
  337.  C2(AudioR);
  338.  C2(Kopplung);
  339.  C2(AutoSave);
  340.  C2(AutoRepeat);
  341.  C2(AutoStart);
  342.  C2(Format);
  343.  C2(Kontrolle);
  344.  C2(Anzeige);
  345.  C2(AutoLoad);
  346.  C2(AutoFlush);
  347.  C2(Auswahlmodus);
  348. }
  349.  
  350. void PrefsLaden()
  351. {
  352.  register struct FileHandle *fh;
  353.  
  354.  SleepPointer(CDPlayerWnd);
  355.  fh=Open("S:MusicBox.config",MODE_OLDFILE);
  356.  if(fh!=NULL)
  357.   {
  358.    Read(fh,&Prefs,sizeof(struct Prefs));
  359.    Close(fh);
  360.    C1(VolumenL);
  361.    C1(VolumenR);
  362.    C1(AudioL);
  363.    C1(AudioR);
  364.    C1(Kopplung);
  365.    C1(AutoSave);
  366.    C1(AutoRepeat);
  367.    C1(AutoStart);
  368.    C1(Format);
  369.    C1(Kontrolle);
  370.    C1(Anzeige);
  371.    C1(AutoLoad);
  372.    C1(AutoFlush);
  373.    C1(Auswahlmodus);
  374.    SetzeLR();
  375.    Volumen();
  376.    AuswurfLock();
  377.    if(IsIconify==FALSE)
  378.      PrefsZeigen();
  379.   }
  380.  else
  381.    KopierePrefs();
  382.  ClearPointer(CDPlayerWnd);
  383. }
  384.  
  385. void PrefsSichern()
  386. {
  387.  register struct FileHandle *fh;
  388.  
  389.  SleepPointer(CDPlayerWnd);
  390.  fh=Open("S:MusicBox.config",MODE_NEWFILE);
  391.  if(fh!=NULL)
  392.   {
  393.    KopierePrefs();
  394.    Write(fh,&Prefs,sizeof(struct Prefs));
  395.    Close(fh);
  396.   }
  397.  ClearPointer(CDPlayerWnd);
  398. }
  399.  
  400. void Gesamtkatalog()
  401. {
  402.  REGISTER UBYTE flags;
  403.  
  404.  SichereKatalog();
  405.  if(LowRes) flags=OA_LOWRES; else flags=0;
  406.  SleepPointer(CDPlayerWnd);
  407.  if(Einstellungen.Funktion!=STANDBY)
  408.    OpenArchive(Katalog->DiscID,Einstellungen.Track,flags);
  409.  else
  410.    OpenArchive(0,0,flags);
  411.  ClearPointer(CDPlayerWnd);
  412. }
  413.  
  414. #asm
  415.    public _ExpungeLibrary
  416.  
  417. _ExpungeLibrary:
  418.    move.l a6,-(sp)
  419.    move.l 8(sp),a6
  420.    jsr -18(a6)
  421.    move.l (sp)+,a6
  422.    rts
  423. #endasm
  424.  
  425. void KillLibrary(lib)
  426.  struct Library *lib;
  427. {
  428.  Forbid();
  429.  RemLibrary(lib);
  430.  lib->lib_OpenCnt--;
  431.  ExpungeLibrary(lib);
  432.  Permit();
  433. }
  434.  
  435. void AboutDrive()
  436. {
  437.  struct InfoStruct info;
  438.  
  439.  info.Title=GS(59,"Music Box - About CD-drive");
  440.  info.ProgName=TITEL;
  441.  info.Icon=&CDMusicBox;
  442.  info.LowRes=LowRes;
  443.  info.Text[0].LeftEdge=95;
  444.  info.Text[0].TopEdge=85;
  445.  info.Text[0].Flags=ISTF_LEFT;
  446.  info.Text[0].Text=GS(60,"Vendor:");
  447.  
  448.  info.Text[1].LeftEdge=95;
  449.  info.Text[1].TopEdge=100;
  450.  info.Text[1].Flags=ISTF_LEFT;
  451.  info.Text[1].Text=GS(61,"Product:");
  452.  
  453.  info.Text[2].LeftEdge=95;
  454.  info.Text[2].TopEdge=115;
  455.  info.Text[2].Flags=ISTF_LEFT;
  456.  info.Text[2].Text=GS(62,"Revision:");
  457.  
  458.  info.Text[3].LeftEdge=180;
  459.  info.Text[3].TopEdge=85;
  460.  info.Text[3].Flags=ISTF_LEFT;
  461.  info.Text[3].Text=&ThisDrive->Vendor;
  462.  
  463.  info.Text[4].LeftEdge=180;
  464.  info.Text[4].TopEdge=100;
  465.  info.Text[4].Flags=ISTF_LEFT;
  466.  info.Text[4].Text=&ThisDrive->Product;
  467.  
  468.  info.Text[5].LeftEdge=180;
  469.  info.Text[5].TopEdge=115;
  470.  info.Text[5].Flags=ISTF_LEFT;
  471.  info.Text[5].Text=&ThisDrive->Revision;
  472.  info.Text[6].LeftEdge=0;
  473.  info.RegInfo=NULL;
  474.  SleepPointer(CDPlayerWnd);
  475.  InformationA(&info);
  476.  ClearPointer(CDPlayerWnd);
  477. }
  478.  
  479. void AboutCD()
  480. {
  481.  SleepPointer(CDPlayerWnd);
  482.  if(Einstellungen.Funktion!=STANDBY) DisplayCatalog(Katalog,LowRes);
  483.  ClearPointer(CDPlayerWnd);
  484. }
  485.  
  486. void Randomize()
  487. {
  488.  ULONG array[2];
  489.  
  490.  ReadEClock(&array);
  491.  srand((FLOAT)array[1]);
  492. }
  493.  
  494. int Random(max)
  495.  int max;
  496. {
  497.  register int x;
  498.  
  499.  if(max==0) return(1);
  500.  
  501.  x=rand() % max;
  502.  x++;
  503.  return(x);
  504. }
  505.  
  506. void Print()
  507. {
  508.  register struct Katalog *cat;
  509.  
  510.  if(Einstellungen.Funktion!=STANDBY) cat=Katalog; else cat=NULL;
  511.  PrintIt(CDPlayerWnd,cat);
  512. }
  513.  
  514.